package jdkproxy;

import java.lang.reflect.Proxy;

/**
 * 动态代理必须实现接口
 *1 jdk动态代理最重要的是InvocationHandler、2 代理的对象必须实现接口
 ** Hello hello= Proxy.newProxyInstance(Hello.getClass().getClassLoader(), target.getClass().getInterfaces(), invocationHandler);
 *  * hello.sayHello --->invocationHandler.invoke功能
 * 1  Proxy.newProxyInstance 传参数接口接口，然后有一个InvocationHandler接口
 * 2 然后实现的InvocationHandler接口，里面实现调用真正的reealSubject的事件。
 * 参考网址：https://www.iteye.com/blog/ysj5125094-2054620
 */
public class TestJdkProxy {
	public static void main(String... args) {
		Hello target = new HelloImpl();
		MyInvocationHandler handler = new MyInvocationHandler(target);
		//Hello proxy = (HelloImpl) handler.getProxy();
		//也就是说在使用动态代理时，用来生成代理的委托对象必须是一个接口。
		//这里不能强制转化为HelloImpl
		Hello proxy = (Hello) Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),handler);
	    proxy.sayHello("hello");
	}
}
